package com.qst.crop.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class PasswordUtils {

    /**
     *  随机生成盐值，对密码进行加密处理
     * @param password 注册时用户使用的密码
     * @return 加盐处理后的 盐加密码值, 存储在数据库中
     */
    public static String encrypt(String password){
        // 获取盐值, 并且salt里有“-”要换成“”
        String salt = UUID.randomUUID().toString().replace("-", "");

        // 加盐后进行哈希处理
        String processedPassword = DigestUtils.md5DigestAsHex((password + salt).getBytes());

        String finalPassword = salt + "$" + processedPassword;
        return finalPassword;
    }

    /**
     *  根据得到的盐值对密码处理
     * @param password
     * @param salt
     * @return
     */
    public static String encrypt(String password, String salt){
        // 加盐后进行哈希处理
        String processedPassword = DigestUtils.md5DigestAsHex((password + salt).getBytes());

        String finalPassword = salt + "$" + processedPassword;
        return finalPassword;
    }

    /**
     *  密码判断
     * @param inputPassword 登录输入的密码
     * @param finalPassword 数据库存储的密码
     * @return
     */
    public static boolean check(String inputPassword, String finalPassword){
        if(!StringUtils.hasLength(inputPassword) || !StringUtils.hasLength(finalPassword)){
            return false;
        }

        String salt = finalPassword.split("\\$")[0];

        String inputPasswordProcessed = PasswordUtils.encrypt(inputPassword, salt);

        return inputPasswordProcessed.equals(finalPassword);
    }
}

